package main

var done bool
var str string

// --------------------------------------------------------

func setup() {
	done = true
	str = "heeo"

}

var a = make(chan int)
var mg string

// --------------------------------------------------------

var limit = make(chan int, 3)

func main() {

	// go setup()

	// for !done {
	// }
	// fmt.Println(str)
	// --------------------------------------------------------
	// go func() { // chan 可以解决并发执行的顺序，原子操作可以解决并发产生的枪资源问题
	// 	mg = "haha"
	// 	close(a) // close() 相当于 a <-false
	// 	// 互斥锁也可以实现并发执行的顺序
	// }()
	// <-a
	// fmt.Println(mg) // UTF-8 中文默认是3个字节
	// --------------------------------------------------------
	// var work = []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11, 2, 21, 321, 43}
	// for _, w := range work {
	// 	go func() {
	// 		limit <- 1
	// 		fmt.Print(w, "ddd")
	// 		<-limit
	// 	}()
	// 	fmt.Println("=========")
	// }
	// select {}
	// --------------------------------------------------------

}
